package com.ruoyi.system.service.impl;

import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.SysEmp;
import com.ruoyi.system.mapper.SysEmpMapper;
import com.ruoyi.system.mapper.SysUserEmpMapper;
import com.ruoyi.system.service.ISysEmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 岗位信息 服务层处理
 * 
 * @author ruoyi
 */
@Service
public class SysEmpServiceImpl implements ISysEmpService
{
    @Autowired
    private SysEmpMapper empMapper;

    @Autowired
    private SysUserEmpMapper userEmpMapper;

    /**
     * 查询岗位信息集合
     * 
     * @param emp 岗位信息
     * @return 岗位信息集合
     */
    @Override
    public List<SysEmp> selectEmpList(SysEmp emp)
    {
        return empMapper.selectEmpList(emp);
    }

    /**
     * 查询所有岗位
     * 
     * @return 岗位列表
     */
    @Override
    public List<SysEmp> selectEmpAll()
    {
        return empMapper.selectEmpAll();
    }

    /**
     * 根据用户ID查询岗位
     * 
     * @param userId 用户ID
     * @return 岗位列表
     */
    @Override
    public List<SysEmp> selectEmpsByUserId(Long userId)
    {
        List<SysEmp> userEmps = empMapper.selectEmpsByUserId(userId);
        List<SysEmp> emps = empMapper.selectEmpAll();
        for (SysEmp emp : emps)
        {
            for (SysEmp userRole : userEmps)
            {
                if (emp.getEmpId().longValue() == userRole.getEmpId().longValue())
                {
                    emp.setFlag(true);
                    break;
                }
            }
        }
        return emps;
    }

    /**
     * 通过岗位ID查询岗位信息
     * 
     * @param empId 岗位ID
     * @return 角色对象信息
     */
    @Override
    public SysEmp selectEmpById(Long empId)
    {
        return empMapper.selectEmpById(empId);
    }

    /**
     * 批量删除岗位信息
     * 
     * @param ids 需要删除的数据ID
     * @throws Exception
     */
    @Override
    public int deleteEmpByIds(String ids)
    {
        Long[] empIds = Convert.toLongArray(ids);
        /*for (Long empId : empIds)
        {
            SysEmp emp = selectEmpById(empId);
            if (countUserEmpById(empId) > 0)
            {
                throw new ServiceException(String.format("%1$s已分配,不能删除", emp.getEmpName()));
            }
        }*/
        return empMapper.deleteEmpByIds(empIds);
    }

    /**
     * 新增保存岗位信息
     * 
     * @param emp 岗位信息
     * @return 结果
     */
    @Override
    public int insertEmp(SysEmp emp)
    {
        return empMapper.insertEmp(emp);
    }

    /**
     * 修改保存岗位信息
     * 
     * @param emp 岗位信息
     * @return 结果
     */
    @Override
    public int updateEmp(SysEmp emp)
    {
        return empMapper.updateEmp(emp);
    }

    /**
     * 通过岗位ID查询岗位使用数量
     * 
     * @param empId 岗位ID
     * @return 结果
     */
    @Override
    public int countUserEmpById(Long empId)
    {
        return userEmpMapper.countUserEmpById(empId);
    }

    /**
     * 校验岗位名称是否唯一
     * 
     * @param emp 岗位信息
     * @return 结果
     */
    @Override
    public String checkEmpNameUnique(SysEmp emp)
    {
        Long empId = StringUtils.isNull(emp.getEmpId()) ? -1L : emp.getEmpId();
        SysEmp info = empMapper.checkEmpNameUnique(emp.getEmpName());
        if (StringUtils.isNotNull(info) && info.getEmpId().longValue() != empId.longValue())
        {
            return UserConstants.POST_NAME_NOT_UNIQUE;
        }
        return UserConstants.POST_NAME_UNIQUE;
    }

    /**
     * 校验岗位编码是否唯一
     * 
     * @param emp 岗位信息
     * @return 结果
     */
    @Override
    public String checkEmpCodeUnique(SysEmp emp)
    {
        Long empId = StringUtils.isNull(emp.getEmpId()) ? -1L : emp.getEmpId();
        SysEmp info = empMapper.checkEmpCodeUnique(emp.getEmpCode());
        if (StringUtils.isNotNull(info) && info.getEmpId().longValue() != empId.longValue())
        {
            return UserConstants.POST_CODE_NOT_UNIQUE;
        }
        return UserConstants.POST_CODE_UNIQUE;
    }
}
